#pragma once

#include "IMessageHandler.h"
#include "NetworkMessage.h"
#include <memory>
#include <functional>

namespace SeanNetwork {

/**
 * @brief 默认消息处理器
 * 提供基本的消息处理功能，可被应用层继承或直接使用
 */
class DefaultMessageHandler : public IMessageHandler {
public:
    /**
     * @brief 构造函数
     */
    DefaultMessageHandler();

    /**
     * @brief 析构函数
     */
    virtual ~DefaultMessageHandler();

    /**
     * @brief 处理接收到的消息
     * @param message 网络消息
     * @param channelId 通道ID
     * @return 是否成功处理
     */
    virtual bool HandleMessage(std::shared_ptr<NetworkMessage> message, uint32_t channelId) override;

    /**
     * @brief 注册消息处理回调
     * @param messageType 消息类型
     * @param callback 回调函数
     */
    void RegisterMessageCallback(uint16_t messageType, std::function<bool(std::shared_ptr<NetworkMessage>, uint32_t)> callback);

    /**
     * @brief 设置默认消息回调
     * @param callback 回调函数
     */
    void SetDefaultCallback(std::function<bool(std::shared_ptr<NetworkMessage>, uint32_t)> callback);

private:
    /**
     * @brief 默认消息回调
     */
    std::function<bool(std::shared_ptr<NetworkMessage>, uint32_t)> m_DefaultCallback;

    /**
     * @brief 消息回调映射表
     */
    std::unordered_map<uint16_t, std::function<bool(std::shared_ptr<NetworkMessage>, uint32_t)>> m_Callbacks;
};

} // namespace SeanNetwork 
